/**
 * rust的不可恢复错误panic
 */
use std::panic;
fn main() {
    catch_unwind();
    //触发panic的方式之一：直接调用panic!()宏
    //panic!("这是什么！");
    //触发方式2：越界访问
    println!("在异常之后......");
    let mut arr: Vec<i32> = vec![1, 2, 3];
    arr[1] = 9;
    println!("{}", arr[3]); //越界访问第四个元素，触发不可恢复错误
}

fn catch_unwind() {
    let result = panic::catch_unwind(|| {
        // 这里是可能会 panic 的代码
        println!("Before panic");
        //panic!("This is a panic!");
        let mut arr: Vec<i32> = vec![1, 2, 3];
        arr[1] = 9;
        println!("{}", arr[3]); //越界访问第四个元素，触发不可恢复错误
        println!("After panic"); // 这行代码不会被执行
    });
    match result {
        Ok(_) => println!("Code executed successfully."),
        Err(_) => println!("Code panicked and was caught."),
    }
    println!("程序继续运行-------------------------------");
}
